package com.fanxing.utils;

import java.io.*;
import java.util.Arrays;
import java.util.Comparator;

/**
 * 临时文件管理器
 */
public class TempFileManager {

    private static final String APP_NAME = "FileMerge1366590294";
    private static final String TEMP_FILE_PATH = "src/main/resources/tempfiles";

    // 获取临时目录
    public static File getTempDirectory() throws IOException {
        // 设置临时目录
        File tempDir = new File(TEMP_FILE_PATH);
        
        // 如果目录不存在，则创建它
        if (!tempDir.exists()) {
            if (!tempDir.mkdirs()) {
                throw new IOException("无法创建临时目录: " + tempDir.getAbsolutePath());
            }
        }
        System.out.println("临时目录路径: " + tempDir.getAbsolutePath());
        return tempDir;
    }

    // 保存临时文件
    public static void saveTempFile(String filePath) throws IOException {
        // 获取文件名
        int index = filePath.lastIndexOf("\\");
        String fileName = filePath.substring(index + 1);
        System.out.println("存储文件: " + fileName);
        // 指定临时文件路径
        File tempFile = new File(getTempDirectory(), fileName);
        // 获取文件输入流
        try(
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(tempFile))
                ){
            byte[] buffer = new byte[1024*1024];
            int length;
            while ((length = bis.read(buffer)) > 0) {
                bos.write(buffer, 0, length);
            }
        }
    }

    // 清除包下所有临时文件
    public static void clearTempFiles() throws IOException {
        System.out.println("开始清除临时文件");
        // 获取临时目录
        File tempDir = getTempDirectory();
        // 如果目录不存在，则直接返回
        if (!tempDir.exists()) {
            return;
        }
        // 删除文件夹
        deleteDirectory(tempDir);
        System.out.println("清除临时文件完毕");
    }

    // 删除文件夹及其所有内容
    public static void deleteDirectory(File directory) {
        if (directory == null || !directory.exists()) {
            return;
        }
        File[] files = directory.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    deleteDirectory(file); // 递归删除子文件夹
                } else {
                    file.delete(); // 删除文件
                }
                System.out.println("删除文件: " + file.getAbsolutePath());
            }
        }
        directory.delete(); // 删除空文件夹
    }

    // 获取所有的非文件夹临时文件
    public static File[] getAllTempFiles() throws IOException {
        // 获取临时目录
        File[] listFiles = getTempDirectory().listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return !pathname.isDirectory();
            }
        });
        // 如果没有文件则返回null
        if (listFiles == null){
            return null;
        }
        // 将文件数组按照制定规则排序添加到新的数组中
        File[] files = new File[listFiles.length];
        for (int index = 0; index < listFiles.length; index++) {
            if (index == 0){
                files[index] = listFiles[listFiles.length-1];
            } else {
                files[index] = listFiles[index-1];
            }
        }
        return files;
    }

}